package com.atguigu.structures.hashtable;

import com.atguigu.structures.hashtable.node.Emp;
import com.atguigu.structures.hashtable.node.EmpLinkedList;

/**
 * 哈希表
 *
 * @author: zhaozongyi
 * @date: 2022-09-13 17:30
 */
public class HashTab {

    private EmpLinkedList[] empLinkedLists;
    private int size;  //表示有多少条链表

    public HashTab(int size) {
        this.size = size;
        empLinkedLists = new EmpLinkedList[size];
        for (int i = 0; i < empLinkedLists.length; i++) {
            empLinkedLists[i] = new EmpLinkedList();
        }
    }

    /**
     * 新增
     *
     * @param emp
     */
    public void put(Emp emp) {
        int position = hash(emp.id);
        empLinkedLists[position].add(emp);
    }

    /**
     * 获取
     *
     * @param id
     */
    public void get(int id) {
        int position = hash(id);
        Emp emp = empLinkedLists[position].findEmpById(id);
        if (emp != null) {//找到
            System.out.printf("在第%d条链表中找到 雇员 id = %d\n", (position + 1), id);
        } else {
            System.out.println("在哈希表中，没有找到该雇员~");
        }
    }

    /**
     * 遍历,遍历所有链表
     */
    public void list() {
        for (int i = 0; i < empLinkedLists.length; i++) {
            empLinkedLists[i].list(i);
        }
    }

    /**
     * 简易散列算法
     *
     * @param id
     * @return
     */
    private int hash(int id) {
        return id % 10;
    }
}
